#ifndef __APP_BUFFER_H__
#define __APP_BUFFER_H__

#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include "log.h"

// 小缓冲区
typedef struct {
    unsigned char *ptr; // 指向缓冲区地址的指针
    int buffer_size; // 缓冲区大小
    int buffer_len; // 缓冲区已使用的长度
} SubBuffer;
// 大缓冲区
typedef struct {
    SubBuffer *subBuffer[2]; // 小缓冲区
    int read_index; // 读索引
    int write_index; // 写索引
    pthread_mutex_t read_mutex; // 读锁
    pthread_mutex_t write_mutex; // 写锁
} Buffer;
/**
 * 初始化缓冲区
 * @param buffer_size 小缓冲区大小
 * @return 缓冲区指针
 */
Buffer *app_buffer_init(int buffer_size);
/**
 * 释放缓冲区
 * @param buffer 缓冲区指针
 */
void app_buffer_free(Buffer *buffer);
/**
 * 读取缓冲区数据
 * @param buffer 缓冲区指针
 * @param data_buf 缓冲区数据
 * @param size 要读到缓冲区的大小
 * @return 读取的数据长度, -1 读取失败
 */
int app_buffer_read(Buffer *buffer, char *data_buf, int size);
/**
 * 写入缓冲区数据
 * @param buffer 缓冲区指针
 * @param data 要写入的数据
 * @param len 要写入的数据长度
 * @return 0 写入成功, -1 写入失败
 */
int app_buffer_write(Buffer *buffer, char *data, int len);

#endif
